$(function () {
    initTable();
    validateForm();
});

/**
 * 初始化表格
 */
function initTable() {

    //先销毁表格
    $('#table').bootstrapTable('destroy');

    $('#table').bootstrapTable({
        showRefresh: false,
        pagination: true,
        sidePagination: "server",
        pageSize: "30",
        pageList: "[30, 60, 120, ALL]",
        showColumns: false,
        url: baseUrl + '/user/queryByPage',
        columns: [
            {
                checkbox: true,
                align: 'center'
            },
            {
                title: '用户名',
                field: 'user_idcard',
                align: 'center'
            },
            {
                title: '姓名',
                field: 'user_name',
                align: 'center'
            },
            {
                title: '角色',
                field: 'roleNames',
                align: 'center'
            }
        ],
        striped: true, //表格显示条纹
        search: false, //是否启用查询
        queryParamsType: "undefined",
        onLoadError: function () {
            $.confirm({
                title: '提示!',
                content: '服务器异常！',
                type: 'red',
                typeAnimated: true,
                buttons: {
                    close: {
                        text: '关闭',
                        btnClass: 'btn-red'
                    }
                }
            });
        },
        onLoadSuccess: function (data) {
            // 错误提示
            errorAlert(data);
        }
    });
}

/**
 * 表单验证
 */
function validateForm() {

    $('#editForm').bootstrapValidator({
        excluded: [':disabled'],
        feedbackIcons: {
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
        },
        submitButtons: 'button[type="submit"]',
        resetFormData: true,
        fields: {
            user_idcard: {
                validators: {
                    /*非空提示*/
                    notEmpty: {
                        message: '用户名不能为空'
                    },
                    /*长度提示*/
                    stringLength: {
                        min: 1,
                        max: 20,
                        message: '用户名不正确'
                    },
                    //有2字符以上才发送ajax请求，（input中输入一个字符，插件会向服务器发送一次，设置限制，2字符以上才开始）
                    threshold: 4,
                    //ajax验证。server result:{"valid",true or false} 向服务发送当前input name值，获得一个json数据。例表示正确：{"valid",true}
                    remote: {
                        url: baseUrl + '/user/find',
                        // 自定义提交数据，默认值提交当前input value
                        data: function (validator) {
                            return {
                                user_idcard: $('#user_idcard').val()
                            };
                        },
                        message: '用户名已存在',//提示消息
                        delay: 2000,//每输入一个字符，就发ajax请求，服务器压力还是太大，设置2秒发送一次ajax（默认输入一个字符，提交一次，服务器压力太大）
                        type: 'POST'//请求方式
                    }
                }
            },
            user_name: {
                validators: {
                    /*非空提示*/
                    notEmpty: {
                        message: '姓名不能为空'
                    },
                    /*长度提示*/
                    stringLength: {
                        min: 2,
                        max: 20,
                        message: '姓名不正确'
                    }
                }
            }
        }
    }).on('success.form.bv', function (e, data) {
        e.preventDefault();//阻止form默认事件
        var id = $('#id').val();
        var url;
        if (id == '') {
            url = baseUrl + '/user/add';
        } else {
            url = baseUrl + '/user/update';
        }
        $.post(
            url, {
                id: id,
                user_idcard: $('#user_idcard').val(),
                user_name: $('#user_name').val()
            },
            function (data) {
                if (data.success) {
                    $('#modal-customText').modal('toggle');
                    $.confirm({
                        title: '成功',
                        content: '操作完成!',
                        autoClose: 'okAction|2000',
                        escapeKey: 'okAction',
                        type: 'blue',
                        buttons: {
                            okAction: {
                                text: '关闭',
                                btnClass: 'btn-blue'
                            }
                        }
                    });
                    $('#table').bootstrapTable('refresh', {silent: true});
                } else {
                    // 错误提示
                    errorAlert(data);
                }
            }, 'json');
    });
}

/**
 * 获取选择行id
 * @returns {Array|*}
 */
function getIdSelections() {
    return $.map($('#table').bootstrapTable('getSelections'), function (row) {
        return row.id;
    });
}

/**
 * 表格项选择事件触发
 */
$('#table').on('check.bs.table uncheck.bs.table ' +
    'check-all.bs.table uncheck-all.bs.table', function () {
    $('#btnUpdate').prop('disabled', !$('#table').bootstrapTable('getSelections').length);
    $('#btnDel').prop('disabled', !$('#table').bootstrapTable('getSelections').length);
    $('#btnRole').prop('disabled', !$('#table').bootstrapTable('getSelections').length);
});

/**
 * 禁用按钮
 */
function disAbleButton() {
    $('#btnUpdate').prop('disabled', true);
    $('#btnDel').prop('disabled', true);
    $('#btnRole').prop('disabled', true);
}

/**
 * 删除操作
 */
function del() {
    var ids = getIdSelections();
    $.confirm({
        title: '确认',
        content: '确认删除？',
        buttons: {
            ok: {
                text: '确认',
                btnClass: 'btn-green',
                keys: ['enter'],
                action: function () {
                    $.post(
                        baseUrl + '/user/del', {ids: ids.toString()},
                        function (data) {
                            if (data.success) {
                                $('#table').bootstrapTable('refresh', {silent: true});
                                // 灰按钮
                                disAbleButton();
                            } else {
                                // 错误提示
                                errorAlert(data);
                            }
                        }, 'json');
                }
            },
            close: {
                text: '取消',
                btnClass: 'btn-default',
                keys: ['esc'],
                action: function () {

                }
            }
        }
    });
}

/**
 * 新增窗口
 */
function add() {
    $('#id').val('');
    $('#user_idcard').val('');
    $('#user_name').val('');
    $("#user_name").attr("readonly", false);// 姓名能修改
    $('#editForm').data('bootstrapValidator').enableFieldValidators("user_idcard", true);// 用户名验证
    $('#modal-user').modal('show');
    $('#editForm').data('bootstrapValidator').resetForm();
}

/**
 * 更新窗口
 */
function update() {
    var data = $('#table').bootstrapTable('getSelections');
    if (data.length > 1) {
        $.confirm({
            title: '提示',
            content: '只能修改一条记录！',
            autoClose: 'okAction|2000',
            escapeKey: 'okAction',
            type: 'orange',
            buttons: {
                close: {
                    text: '关闭',
                    btnClass: 'btn-orange'
                }
            }
        });
    } else {
        $('#id').val(data[0].id);
        $('#user_name').val(data[0].user_name);
        $('#user_idcard').val(data[0].user_idcard);
        $("#user_idcard").attr("readonly", true);// 用户名不能修改
        $('#editForm').data('bootstrapValidator').enableFieldValidators("user_idcard", false);// 取消用户名验证
        $('#modal-user').modal('show');
        $('#editForm').data('bootstrapValidator').resetForm();
    }
}

/**
 * 搜索
 */
function search() {
    var user_idcard = $('#search_user_idcard').val();
    var user_name = $('#search_user_name').val();
    if (user_idcard != '' || user_name != '') {
        var opt = {
            url: baseUrl + "/user/queryByPage",
            silent: true,
            query: {
                user_idcard: user_idcard,
                user_name: user_name
            }
        };
        $("#table").bootstrapTable('refresh', opt);
    }
}

/**
 * 授权角色
 */
function grantRole() {
    // 如果选择的用户只是一个，则复选已经拥有的角色
    var userInfos = $('#table').bootstrapTable('getSelections');
    var hasRoleIds = [];
    if (userInfos.length == 1) {
        var roles = userInfos[0].roles;
        if (roles != null && roles.length > 0) {
            for (var i in roles) {
                hasRoleIds.push(parseInt(roles[i].id));
            }
        }
    }
    // 查询显示所有可用角色
    $.post(
        baseUrl + '/role/query', {},
        function (data) {
            if (data) {
                $('#roles').html('');
                var roleDiv = '';
                var roleIds = [];// 可用角色ID数组
                for (var i in data) {
                    roleIds.push(data[i].id);
                }
                // 设置已拥有角色选中
                if (hasRoleIds.length > 0) {
                    // 显示已授权角色
                    for (var j in hasRoleIds) {
                        if ($.inArray(hasRoleIds[j], roleIds) > -1) {
                            for (var i in data) {
                                if (data[i].id == hasRoleIds[j]) {
                                    roleDiv += '<div class=\'checkbox\'><label>' +
                                        '<input name=\'roleId\' type=\'checkbox\' checked value=\'' + data[i].id + '\'>'
                                        + data[i].description + '[' + data[i].name + ']' +
                                        '</label></div>';
                                }
                            }
                        }
                    }
                    // 显示没有授权角色
                    for (var k in roleIds) {
                        if ($.inArray(roleIds[k], hasRoleIds) < 0) {
                            for (var i in data) {
                                if (data[i].id == roleIds[k]) {
                                    roleDiv += '<div class=\'checkbox\'><label>' +
                                        '<input name=\'roleId\' type=\'checkbox\' value=\'' + data[i].id + '\'>'
                                        + data[i].description + '[' + data[i].name + ']' +
                                        '</label></div>';
                                }
                            }
                        }
                    }
                } else {
                    for (var i in data) {
                        roleDiv += '<div class=\'checkbox\'><label>' +
                            '<input name=\'roleId\' type=\'checkbox\' value=\'' + data[i].id + '\'>'
                            + data[i].description + '[' + data[i].name + ']' +
                            '</label></div>';
                    }
                }

                $('#roles').html(roleDiv);
                $('#modal-role').modal('show');
            } else {
                // 错误提示
                errorAlert(data);
            }
        }, 'json');
}

/**
 * 保存角色
 */
function userRoleSave() {
    var user_ids = getIdSelections();
    var role_ids = [];
    $('input:checkbox[name=roleId]:checked').each(function () {
        role_ids.push($(this).val());
    })
    // 删除用户角色
    if (role_ids.length == 0) {
        $.post(
            baseUrl + '/userRole/del', {userIds: user_ids.toString()},
            function (data) {
                if (data.success) {
                    $('#table').bootstrapTable('refresh', {silent: true});
                    $('#modal-role').modal('toggle');
                } else {
                    // 错误提示
                    errorAlert(data);
                }
            }, 'json');
    } else { // 修改用户角色
        var userRole;
        var userRoles = [];
        for (var i in user_ids) {
            for (var j in role_ids) {
                userRole = {userId: user_ids[i], roleId: parseInt(role_ids[j])};
                userRoles.push(userRole);
            }
        }
        $.post(
            baseUrl + '/userRole/edit', {userRoles: JSON.stringify(userRoles)},
            function (data) {
                if (data.success) {
                    $('#table').bootstrapTable('refresh', {silent: true});
                    $('#modal-role').modal('toggle');
                } else {
                    // 错误提示
                    errorAlert(data);
                }
            }, 'json');
    }
}